package com.bookstore.pojo;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.*;

/**
 * 保存购物信息，购物车操作方法
 */
public class Cart implements Serializable {
    //购物项的保存
    private Map<String,CartItem> items=new LinkedHashMap<>();
    private Double amount;
    private Collection<CartItem> allItems;
    /**
     * 返回所有的购物项
     * @return
     */
    public List<CartItem> getAllItems(){
//        返回map中的所有值
        Collection<CartItem> values = items.values();
        return new ArrayList<>(values);
    }

    /**
     * 获取商品总数
     * @return
     */
    public int getTotalCount() {
        List<CartItem> allItems = getAllItems();
        int count=0;
        for (CartItem item:allItems) {
            count+=item.getCount();
        }
        return count;
    }

    /**
     * 计算购物项的总金额
     */
    public double getAmount() {
//        使用BigDecimal解决大数的运算
        List<CartItem> allItems = getAllItems();
        BigDecimal price = new BigDecimal(0.0 + "");
        for (CartItem item:allItems) {
            BigDecimal totalPrice = new BigDecimal(item.getTotalPrice() + "");
            price=price.add(totalPrice);
        }
        return price.doubleValue();
    }

    @Override
    public String toString() {
        return "Cart{" +
                "items=" + items +
                '}';
    }

    //----------------------------------------------------------------------------------------------------------------------
    //定义操作方法
    //添加商品到购物车中
    public void addBookToCart(Book book){
        CartItem item = items.get(book.getId().toString());
        if(item==null){
            item=new CartItem();
            //将购物想添加至购物车
            item.setBook(book);
            item.setCount(1);
            items.put(book.getId().toString(),item);
        }else {
            item.setCount(item.getCount()+1);
        }
    }

    /**
     * 删除购物项
     */
    public void deleteItem(String bookId){
//        int id=Integer.parseInt(bookId);
        items.remove(bookId);
    }

    /**
     *
     * @param bookId 要修改的条目
     * @param count 修改后的数量
     */
    public void updateCount(String bookId,int count){
        int id=Integer.parseInt(bookId);
        CartItem cartItem = items.get(id);
        cartItem.setCount(count);

    }

    /**
     * 清空购物车
     */
    public void clear(){
        //清空所有的键值对
        items.clear();
    }
}
